import 'dart:math';

import 'package:fijkplayer/fijkplayer.dart';
import 'package:fijkplayer_skin/fijkplayer_skin.dart';
import 'package:fijkplayer_skin/schema.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

import '/api/api.dart';

/// <summary>
/// todo: 视频播放
/// author：zwb
/// dateTime： 2021/11/19 18:21
/// filePath： lib/page/show/show_video_page.dart
/// desc:
/// <summary>
///
class ShowVideoPage extends StatefulWidget {
  final  String? url;
  final  String? title;
  final  bool autoPlay;
  // final Function
  const ShowVideoPage({Key? key, this.url, this.title, this.autoPlay:false}) : super(key: key);

  @override
  _ShowVideoPageState createState() => _ShowVideoPageState();
}

class _ShowVideoPageState extends State<ShowVideoPage> {
  FijkPlayer? player;


  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    player = FijkPlayer();
    player!.setDataSource(widget.url ?? Api.testVideo1,autoPlay: widget.autoPlay,showCover: true);
    // player!.addListener(listener);
    videoList = {
      "video": [
        {
          "name": "",
          "list": [
            {
              "url": "${widget.url}",
              "name": ""
            },
          ]
        },
      ]
    };
    _videoSourceTabs = VideoSourceFormat.fromJson(videoList);
    // 这句不能省，必须有
    speed = 1.0;
  }
  VideoSourceFormat? _videoSourceTabs;
  // 视频源列表，请参考当前videoList完整例子
  Map<String, List<Map<String, dynamic>>> videoList = {};

  listener(){
    bool isPlaying = player!.state == FijkState.started;
    // setState(() {
    //   isPlaying ? player!.pause() : player!.start();
    // });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        width: Get.width,
        height: Get.height,
        color: Colors.green,
        child: Center(
          child:  FijkView(
            width: Get.width,
            height: Get.height,
            color: Colors.black,
            fit: FijkFit.contain,
            player: player!,
            // panelBuilder: (FijkPlayer player,
            //     FijkData data,
            //     BuildContext context,
            //     Size viewSize,
            //     Rect texturePos,){
            //   return CustomFijkPanel(
            //     player: player,
            //     // 传递 context 用于左上角返回箭头关闭当前页面，不要传递错误 context，
            //     // 如果要点击箭头关闭当前的页面，那必须传递当前组件的根 context
            //     pageContent: context,
            //     viewSize: viewSize,
            //     texturePos: texturePos,
            //     // 标题 当前页面顶部的标题部分，可以不传，默认空字符串
            //     // playerTitle: "标题",
            //     // 当前视频改变钩子，简单模式，单个视频播放，可以不传
            //     // onChangeVideo: onChangeVideo,
            //     // 当前视频源tabIndex
            //     curTabIdx: 0,
            //     //当前视频源activeIndex
            //     curActiveIdx: 0,
            //     //显示的配置
            //     showConfig: PlayerShowConfig(),
            //     //json格式化后的视频数据
            //     videoFormat: _videoSourceTabs,
            //   );
            // },
          ),
        ),
      ),
    );
  }

  @override
  void dispose() {
    // TODO: implement dispose
    super.dispose();
    if(player!=null) player!.release();
    // player!.removeListener(listener);
  }

  Widget simplestUI(FijkPlayer player, BuildContext context, Size viewSize, Rect texturePos) {
    // texturePos 可能超出 viewSize 大小，所以先进行大小约束。
    Rect rect = Rect.fromLTRB(
        max(0.0, texturePos.left),
        max(0.0, texturePos.top),
        min(viewSize.width, texturePos.right),
        min(viewSize.height, texturePos.bottom));
    bool isPlaying = player.state == FijkState.started;
    return Positioned.fromRect(
      rect: rect,
      child: Container(
        alignment: Alignment.bottomLeft,
        child: IconButton(
          icon: Icon(
            isPlaying ? Icons.pause : Icons.play_arrow,
            color: Colors.white,
          ),
          onPressed: () {
            setState(() {
              isPlaying ? player.pause() : player.start();
            });
          },
        ),
      ),
    );
  }
}

class PlayerShowConfig implements ShowConfigAbs {
  // bool drawerBtn    // 是否显示剧集按钮
  // bool nextBtn      // 是否显示下一集按钮
  // bool speedBtn     // 是否显示速度按钮
  // bool topBar       // 是否显示播放器状态栏（顶部），非系统
  // bool lockBtn      // 是否显示锁按钮
  // bool autoNext     // 播放完成后是否自动播放下一集，false 播放完成即暂停
  // bool bottomPro    // 底部吸底进度条，贴底部，类似开眼视频
  // bool stateAuto    // 是否自适应系统状态栏，true 会计算系统状态栏，从而加大 topBar 的高度，避免挡住播放器状态栏
  // bool isAutoPlay   // 是否自动开始播放
  @override
  bool drawerBtn = false;
  @override
  bool nextBtn = false;
  @override
  bool speedBtn = false;
  @override
  bool topBar = false;
  @override
  bool lockBtn = false;
  @override
  bool autoNext = true;
  @override
  bool bottomPro = false;
  @override
  bool stateAuto = true;
  @override
  bool isAutoPlay = false;
}